package com.gome.boot.config.elasticsearch.cluster;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 多集群写入失败日志工具类.
 *
 * @author baoxiufeng
 */
public class MultiClusterLogger {
    private static Logger logger = LoggerFactory.getLogger(MultiClusterLogger.class);

    /**
     * 日志内容模板
     */
    private static final String LOG_TEMP = "[MULTI_CLUSTER]{}:CLUSTER[{}]-INDEX[{}]-TYPE[{}]-ROUTING[{}]-DID[{}]";

    /**
     * 输出集群正常保存/更新失败日志.
     *
     * @param cluster 集群名称
     * @param index 索引名称
     * @param type 索引文档类型
     * @param routing 路由
     * @param docId 文档ID
     */
    public static void norLog(String cluster, String index, String type, String routing, String docId) {
        log(LogType.NOR, cluster, index, type, routing, docId);
    }

    /**
     * 输出集群异常保存/更新失败日志.
     *
     * @param cluster 集群名称
     * @param index 索引名称
     * @param type 索引文档类型
     * @param routing 路由
     * @param docId 文档ID
     */
    public static void expLog(String cluster, String index, String type, String routing, String docId) {
        log(LogType.EXP, cluster, index, type, routing, docId);
    }

    /**
     * 输出集群异常保存/更新失败日志.
     *
     * @param logType 日志类型
     * @param cluster 集群名称
     * @param index 索引名称
     * @param type 索引文档类型
     * @param routing 路由
     * @param docId 文档ID
     */
    public static void log(LogType logType, String cluster, String index, String type, String routing, String docId) {
        logger.error(LOG_TEMP, logType, cluster, index, type, routing, docId);
    }

    /**
     * 日志类型
     */
    enum LogType {
        NOR,
        EXP
    }
}
